package sv.gob.mtps.sib.controller;

import java.util.Map;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import sv.gob.mtps.sib.model.Unidadmedida;
import sv.gob.mtps.sib.service.UnidadmedidaService;

@Controller
public class UnidadmedidaController {

	@Autowired
	private UnidadmedidaService unidadmedidaService;

	@RequestMapping("/admin/errUnidad")
	public String err(Map<String, Object> map,
			@ModelAttribute("unidadmedida") @Valid Unidadmedida unidadmedida,
			BindingResult result) {
		map.put("unidadmedida", unidadmedida);
		map.put("unidadmedidaList", unidadmedidaService.listUnidadmedida());
		return "/admin/unidadmedida";
	}

	@RequestMapping("/admin/unidadmedida")
	public String listUnidadmedida(Map<String, Object> map) {
		map.put("unidadmedida", new Unidadmedida());
		map.put("unidadmedidaList", unidadmedidaService.listUnidadmedida());
		return "/admin/unidadmedida";
	}

	@RequestMapping(value = "/admin/unidadmedida/add", method = RequestMethod.POST)
	public String addUnidadmedida(
			@ModelAttribute("unidadmedida") @Valid Unidadmedida unidadmedida,
			BindingResult result) {
		if (!result.hasErrors()) {
			try{
				unidadmedidaService.addUnidadmedida(unidadmedida);
			}
			catch(org.springframework.dao.DataIntegrityViolationException ex){
				ex.printStackTrace();
			}
			catch(DataAccessException e2){
				e2.printStackTrace();
			}
			
			return "redirect:/admin/unidadmedida";
		} else {
			return "redirect:/admin/errUnidad";
		}

	}

	@RequestMapping(value = "/admin/unidadmedida/edit", method = RequestMethod.POST)
	public String updateUnidadmedida(
			@ModelAttribute("unidadmedida") @Valid Unidadmedida unidadmedida,
			BindingResult result) {
		if (!result.hasErrors()) {
			try{
				unidadmedidaService.updateUnidadmedida(unidadmedida);
			}
			catch(org.springframework.dao.DataIntegrityViolationException ex){
				ex.printStackTrace();
			}
			catch(DataAccessException ex){
				ex.printStackTrace();
			}
			
			return "redirect:/admin/unidadmedida";
		} else {
			return "redirect:/admin/errUnidad";
		}

	}

	@RequestMapping(value = "/admin/unidadmedida/delete", method = RequestMethod.POST)
	public String deleteUnidadmedida(
			@ModelAttribute("unidadmedida") Unidadmedida unidadmedida,
			BindingResult result) {
		try{
			unidadmedidaService.removeUnidadmedida(unidadmedida.getIdUnidadmedida());
		}
		catch(org.springframework.dao.DataIntegrityViolationException ex){
			ex.printStackTrace();
		}
		catch(DataAccessException ex){
			ex.printStackTrace();
		}
		
		return "redirect:/admin/unidadmedida";
	}

}
